1
ลักษณะเน้นหน่วยความจำของประสิทธิภาพการประมวลผลด้วย GPU
AI024Lesson 5
00:00

ในการเร่งความเร็วผ่าน GPU เราต้องละทิ้งแนวคิด 'คำนวณก่อน' อย่างเด็ดขาด ประสิทธิภาพสมัยใหม่ถูกกำหนดโดย การจัดการหน่วยความจำ: การประสานงานการจัดสรรข้อมูล การซิงโครไนซ์ และการปรับปรุงประสิทธิภาพระหว่างอุปกรณ์หลัก (CPU) และอุปกรณ์ปลายทาง (GPU)

1. ความแตกต่างระหว่างหน่วยความจำและหน่วยประมวลผล

แม้ว่าความสามารถในการประมวลผลทางคณิตศาสตร์ของ GPU ($TFLOPS$) จะพุ่งสูงขึ้นอย่างรวดเร็ว แต่แบนด์วิดธ์หน่วยความจำ ($GB/s$) กลับเติบโตในอัตราที่ช้ากว่ามาก ทำให้เกิดช่องว่างที่หน่วยประมวลผลมักจะ 'ขาดแคลน' ต้องรอข้อมูลจากหน่วยความจำกราฟิก (VRAM) ดังนั้น การเขียนโปรแกรมบน GPU มักจะเป็นการเขียนโปรแกรมที่เน้นหน่วยความจำ

2. โมเดลโรฟไลน์

โมเดลนี้แสดงความสัมพันธ์ระหว่าง ความเข้มข้นของการคำนวณ (FLOPs/Byte) กับประสิทธิภาพ แอปพลิเคชันส่วนใหญ่มักจะแบ่งออกเป็นสองประเภท:

  • จำกัดด้วยแบนด์วิดธ์ (เส้นเอียงชันสูง): ถูกจำกัดด้วยแบนด์วิดธ์ (เส้นเอียงชันสูง)
  • จำกัดด้วยค่าสูงสุดของ TFLOPS (ระนาบแนวนอน): ถูกจำกัดด้วยค่าสูงสุดของ TFLOPS (ระนาบแนวนอน)
ความเข้มข้นของการคำนวณ (จำนวน FLOPs ต่อ 1 ไบต์)ประสิทธิภาพ (จำนวน GFLOPS)จำกัดด้วยแบนด์วิดธ์จำกัดด้วยค่าสูงสุดของ TFLOPS

3. ภาษีจากการเคลื่อนย้ายข้อมูล

จุดที่ทำให้ประสิทธิภาพลดลงส่วนใหญ่ไม่ใช่การคำนวณ แต่เป็นเวลาหน่วง (latency) และต้นทุนพลังงานในการส่งข้อมูล 1 ไบต์ผ่านบัส PCIe หรือจากหน่วยความจำ HBM โค้ดที่มีประสิทธิภาพสูงจะให้ความสำคัญกับการคงอยู่ของข้อมูล และลดการส่งข้อมูลระหว่างโฮสต์กับอุปกรณ์ให้น้อยที่สุด

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>